package bite;

/**
 * Creared with IntelliJ IDEA.
 * Description:【二进制插入】
 * 给定两个32位整数n和m，同时给定i和j，将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零，且m的二进制位数小于等于i-j+1，其中二进制
 * 的位数从0开始由低到高。
 * User:yxd
 * Date:2022-04-08
 * Time:12:47
 */
import java.util.*;
public class Day12_1 {
    public int binInsert(int n, int m, int j, int i) {
        //可以先让要插入的数右移j为这样要插入的数就和被插入的数后面完全匹配了,,因为被插入的数j~i全是0,因此就可以直接或就可以得到答案
        m <<= j;
        return m | n;
    }
    public int binInsert1(int n, int m, int j, int i) {
// write code here
        String str = Integer.toBinaryString(n);
        String sub = Integer.toBinaryString(m);
        StringBuilder sb = new StringBuilder(str);
        sb.reverse();
        int k = j;
        int x = sub.length() - 1;
        while(k <= i && x >= 0){
            sb.setCharAt(k,sub.charAt(x));
            k ++;
            x --;
        }
//此时就是完成了二进制的转化
        int count = 0;
        int d = 0;
        int sum = 0;
        while(count < sb.length()){
            char c = sb.charAt(count);
            if(c == '1'){
                sum += Math.pow(2,d);
            }
            d ++;
            count ++;
        }
        return sum;
    }
}
